// 实现
// 备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。
// Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
// 我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。
//之所以有管理备忘录的类,是为了符合迪米特原则

#include <iostream>
using namespace std;

class Memento
{
	string state;
	//..
public:
	Memento(const string& s) : state(s) {}
	string getState() const { return state; }
	void setState(const string& s) { state = s; }
};


class Originator
{
	string state="";
	//....
public:
	Originator() {}
	Memento createMomento() {
		Memento m(state);
		return m;
	}
	void setMomento(const Memento& m) {
		state = m.getState();
	}
	void setState(string str)
	{
		state = str;
	}
};



int main()
{
	Originator orginator;
	orginator.setState("状态甲");
	//捕获对象状态，存储到备忘录
	Memento mem = orginator.createMomento();

	//... 改变orginator状态

	//从备忘录中恢复
	orginator.setMomento(mem);
	cout << mem.getState() << endl;

}